#include <stdio.h>
#include <string.h>
#include "STACK.h"
/**
 * Program 4.2 Postfix-expression evaluation
 * -----------------------------------------
 * 借助栈结构
 * 思路：
 * 循环处理输入，对每个输入进行如下处理：
 * - 遇到一个数，入栈；
 * - 遇到一个操作符，出栈两次得到两个数，对两个数应用操作符得到结果，并入栈
 * -------------------------------------------------------------
 * 编译：
 * gcc -o EvalPostfix EvalPostfix.c ArrayStack.c
 * gcc -o EvalPostfix EvalPostfix.c ListStack.c
 * ------------------------------------------
 * 运行：
 * ./EvalPostfix '5 9 8 + 4 6 * * 7 + *'
 */
int main(int argc, char **argv){
    char *a = argv[1];
    int maxN = strlen(a);
    int i;

    STACKinit(maxN);
    for (i = 0; i < maxN; i++) {
        if (a[i] == '+') {
            STACKpush(STACKpop()+STACKpop());
        }
        if (a[i] == '*') {
            STACKpush(STACKpop()*STACKpop());
        }
        if (a[i] >= '0' && a[i] <= '9') {
            STACKpush(0);
        }
        while (a[i] >= '0' && a[i] <= '9') {
            STACKpush(10*STACKpop() + (a[i++] - '0'));
        }

    }

    printf("%d\n", STACKpop());
    
    return 0;
}